"""
Author: gaoyu
Date: 2024-01-10
Description: GFS数据处理启动脚本，用于参数化输入开始和结束时间
python run_process.py --start-date 2021-03 --end-date 2025-03
"""

import argparse
from datetime import datetime
from main import process_main
from loguru import logger

def validate_date(date_str):
    """
    验证日期格式是否正确（YYYY-MM）
    
    Args:
        date_str: 日期字符串
        
    Returns:
        str: 验证通过的日期字符串
        
    Raises:
        ArgumentTypeError: 日期格式不正确时抛出
    """
    try:
        datetime.strptime(date_str, '%Y-%m')
        return date_str
    except ValueError:
        raise argparse.ArgumentTypeError(f'无效的日期格式: {date_str}，请使用YYYY-MM格式')

def main():
    # 创建参数解析器
    parser = argparse.ArgumentParser(description='GFS数据处理程序')
    
    # 添加命令行参数
    parser.add_argument(
        '--start-date',
        type=validate_date,
        required=True,
        help='开始日期 (格式: YYYY-MM)'
    )
    
    parser.add_argument(
        '--end-date',
        type=validate_date,
        required=True,
        help='结束日期 (格式: YYYY-MM)'
    )
    
    # 解析命令行参数
    args = parser.parse_args()
    
    # 验证开始日期不大于结束日期
    start_date = datetime.strptime(args.start_date, '%Y-%m')
    end_date = datetime.strptime(args.end_date, '%Y-%m')
    
    if start_date > end_date:
        logger.error(f"开始日期 ({args.start_date}) 不能大于结束日期 ({args.end_date})")
        return
    
    try:
        # 调用处理函数
        process_main(args.start_date, args.end_date)
    except Exception as e:
        logger.error(f"程序执行出错: {e}")

if __name__ == "__main__":
    main()